package net.tv90.volunteerserveradmin.satoken;

import cn.dev33.satoken.stp.StpInterface;
import jakarta.annotation.Resource;
import net.tv90.volunteerserveradmin.constant.RoleConstant;
import net.tv90.volunteerserveradmin.model.domain.User;
import net.tv90.volunteerserveradmin.service.UserService;
import org.springframework.stereotype.Component;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

@Component
public class StpInterfaceImpl implements StpInterface {

    // 定义各个角色对应的角色标识集合
    static List<String> adminRoleList = new ArrayList<>(Arrays.asList(RoleConstant.ADMIN, RoleConstant.TEACHER, RoleConstant.STUDENT));
    static List<String> teacherRoleList = new ArrayList<>(List.of(RoleConstant.TEACHER));
    static List<String> studentRoleList = new ArrayList<>(List.of(RoleConstant.STUDENT));
    static List<String> nullRoleList = new ArrayList<>(List.of()); // 如果用户没有角色，则返回空集合

    @Resource
    private UserService userService;

    /**
     * 获取指定账号的权限列表。
     * 在本实现中，权限验证暂未使用，因此直接返回空的权限列表。
     *
     * @param o 登录 ID
     * @param s 登录类型
     * @return 空权限列表
     */
    @Override
    public List<String> getPermissionList(Object o, String s) {
        // 返回一个空的权限列表，因为权限验证暂未启用
        return new ArrayList<>();
    }

    /**
     * 根据登录 ID 获取该账号拥有的角色列表。
     *
     * @param loginId   当前登录用户的 ID
     * @param loginType 当前登录用户的类型
     * @return 角色标识集合
     */
    @Override
    public List<String> getRoleList(Object loginId, String loginType) {
        // 根据登录 ID 查询用户信息
        User user = userService.getById(Long.parseLong(loginId.toString()));
        // 如果用户不存在或者没有角色，返回空角色列表
        if (user == null || user.getRole() == null) {
            return nullRoleList;
        }
        // 根据用户的角色 ID 返回对应的角色列表
        return switch (user.getRole()) {
            case 1 -> studentRoleList; // 角色 ID 为 1 的用户是学生
            case 2 -> teacherRoleList; // 角色 ID 为 2 的用户是老师
            case 3 -> adminRoleList;   // 角色 ID 为 3 的用户是管理员
            default -> nullRoleList;   // 其他角色返回空列表
        };
    }
}
